export function EdgeSight() {
  var times = {}
  // performance.timing 似乎是指向window每刷新页面获取的都一样
  const t = performance.timing
  if (!t) {
    console.log('你的浏览器不支持 performance 接口')
  } else {
    // 【重要】页面加载完成的时间 【原因】用户等待页面可用的时间
    times['【页面加载完成的时间】'] = ((t.loadEventEnd - t.navigationStart) / 1000) + ' 秒'
    // 【重要】解析 DOM 树结构的时间 【原因】DOM 树嵌套是不是太多了
    times['【DOM 树结构的时间】'] = ((t.domComplete - t.responseEnd) / 1000) + ' 秒'
    // 【重要】重定向的时间 【原因】拒绝重定向！比如，http://example.com/ 就不该写成 http://example.com
    times['【重定向的时间】'] = ((t.redirectEnd - t.redirectStart) / 1000) + ' 秒'
    // 【原因】DNS 预加载做了么？页面内是不是使用了太多不同的域名导致域名查询的时间太长？
    // 可使用 HTML5 Prefetch 预查询 DNS ，见：[HTML5 prefetch](http://segmentfault.com/a/1190000000633364)
    times['【DNS 查询时间】'] = ((t.domainLookupEnd - t.domainLookupStart) / 1000) + ' 秒'
    // 【重要】读取页面第一个字节的时间
    // 【原因】这可以理解为用户拿到你的资源占用的时间，加异地机房了么，加CDN 处理了么？加带宽了么？加 CPU 运算速度了么？
    // TTFB 即 Time To First Byte 的意思
    // 维基百科：https://en.wikipedia.org/wiki/Time_To_First_Byte
    times['【读取页面第一个字节的时间】'] = ((t.responseStart - t.navigationStart) / 1000) + ' 秒'
    // 【重要】内容加载完成的时间
    // 【原因】页面内容经过 gzip 压缩了么，静态资源 css/js 等压缩了么？
    times['【内容加载完成的时间】'] = ((t.responseEnd - t.requestStart) / 1000) + ' 秒'
    // 【重要】执行 onload 回调函数的时间
    // 【原因】是否太多不必要的操作都放到 onload 回调函数里执行了，考虑过延迟加载、按需加载的策略么？
    times['【执行 onload 回调函数的时间】'] = ((t.loadEventEnd - t.loadEventStart) / 1000) + ' 秒'
    times['【DNS 缓存时间】'] = ((t.domainLookupStart - t.fetchStart) / 1000) + ' 秒'
    times['【卸载页面的时间】'] = ((t.unloadEventEnd - t.unloadEventStart) / 1000) + ' 秒'
    times['【TCP 建立连接完成握手的时间】'] = ((t.connectEnd - t.connectStart) / 1000) + ' 秒'
  }

  // setTimeout(() => {
  //   标记开始。
  //   performance.mark('startTime')
  //   // 标记时间的结束。
  //   performance.mark('end')
  //   // 测量两个不同的标记
  //   performance.measure('time', 'start', 'end')
  //   // 获取所有的测量输出
  //   const measures = performance.getEntriesByName('time')
  //   console.log('获取所有的测量输出', measures)
  //   // console.log(performance.getEntriesByName('time')[0])
  //   // 清除存储的标记
  //   performance.clearMarks()
  //   performance.clearMeasures()
  // }, 1000)
  return times
}
